#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define Max 100
typedef struct
{
	int *elem;
	int length;
	
}sqlist;

// 初始化线性表
int init_list(sqlist &l)
{
	// 为线性表分配内存空间
	l.elem=(int *)malloc(Max*sizeof(int));
	// 初始化线性表长度为0
	l.length=0;
	return 0;
}

// 在线性表中插入元素
int create_list(sqlist &l,int i,int e)
{
	int *newbase;
	// 判断插入位置是否合法
	if(i<1||i>l.length+1)
	{
		return -1;
	}
	// 判断线性表是否已满
	if(l.length>=Max-1)
	{
		// 如果已满，重新分配内存空间
		newbase=(int *)realloc(l.elem,Max*sizeof(int));
		if(!newbase)
		{
			return -1;
		}
		l.elem=newbase;
	}
	//cout<<"*****************"<<endl;
	// 将插入位置后的元素依次后移
	for(int j=l.length-1;j>=i-1;j--)
	{
		l.elem[j+1]=l.elem[j];
	}
	// 在插入位置插入元素
	l.elem[i-1]=e;
	// 线性表长度加1
	l.length++;
	return 0;
}

// 打印线性表
int print_list(sqlist &l)
{
	// 遍历线性表，打印每个元素
	for(int i=1;i<l.length+1;i++)
	{
		cout<<l.elem[i-1]<<endl;
	}
	return 0;
}

// 查找线性表中的元素
int find_list(sqlist &l)
{
	int c,t=0;
	printf("input selct a num:\n");
	cin>>c;
	// 遍历线性表，查找元素
	for(int i=1;i<l.length+1;i++)
	{
		if(c==l.elem[i-1])
		{
			cout<<l.elem[i-1]<<endl;
			t=1;
			break;
		}
			
	}
	// 如果未找到元素，输出提示信息
	if(c==0)
	{
	printf("connot fint it\n");	
	}
	return 0;
}

// 删除线性表中的元素
int del_list(sqlist &l)
{
	int c,t=0;
	printf("input selct a num:\n");
	cin>>c;
	// 遍历线性表，查找元素
	for(int i=1;i<l.length+1;i++)
	{
		if(c==l.elem[i-1])
		{
			// 找到元素后，将其后的元素依次前移
			l.elem[i-1]=l.elem[i];
			t=1;
		}

		if(t==1)
		{
			l.elem[i-1]=l.elem[i];
		}
			
	}
	// 线性表长度减1
	l.length--;
	// 如果未找到元素，输出提示信息
	if(c==0)
	{
	printf("connot find it to del\n");	
	}
	return 0;
}

// 合并两个线性表
int mermg(sqlist &l,sqlist &l1,sqlist &m)
{
	// 判断两个线性表是否为空
	if (l.length==0|| l1.length==0)
	{
		return -1; 
	} 
	// 初始化合并后的线性表
	init_list(m);
	// 将第一个线性表的元素依次插入合并后的线性表
	for(int i=1;i<l.length+1;i++)
	{
		//cout<<l.elem[i-1]<<endl; 
		create_list(m,i,l.elem[i-1]);
	}
	// 将第二个线性表的元素依次插入合并后的线性表
	for(int j=l.length+1;j<l.length+l1.length+1;j++)
	{
		//cout<<l1.elem[j-l.length-1]<<"---"<<(j-l.length-1)<<"-----"<<endl; 
		create_list(m,j,l1.elem[j-l.length-1]);
	}
	return 0;
	
}

int main()
{
	sqlist p1,p2,p3;
	// 初始化三个线性表
	init_list(p1);
	init_list(p2);
	init_list(p3);
	// 向第一个线性表中插入元素
	for(int i=1;i<10;i++)
	{
		create_list(p1,i,i+1);	
	}
	// 向第二个线性表中插入元素
	for(int j=1;j<4;j++)
	{
		create_list(p2,j,j+2);	
	}
	// 在第一个线性表的第三个位置插入元素1
	create_list(p1,3,1);	
	// 打印第一个线性表
	print_list(p1);
	
	printf("*****************\n");	
    //find_list(p1);
    //del_list(p1);
	// 打印第二个线性表
	print_list(p2);
	
	printf("*****************\n");	
	// 合并两个线性表
	mermg(p1,p2,p3);
	// 打印合并后的线性表
	print_list(p3);
	return 0;
	
}